package com.bst.bsj.portal.yun.service;

import java.io.File;
import java.util.List;

// import org.json.JSONException;

// import com.qiniu.api.auth.AuthException;

/**
 * 图片云相关服务，图片托管相关
 * 
 * @author apple 2014-7-6 下午9:28:18
 */
public interface ImageYunService {

    public static final String UPYUN_PROVIDER         = "upyun";
    public static final String QINIU_PROVIDER         = "qiniu";
    public static final String ALIYUN_PROVIDER        = "aliyun";

//    public static final String ALIYUN_ACCESSKEYID     = "5wWRWDu3vEnfpOAG";
//
//    public static final String ALIYUN_ACCESSKEYSECRET = "OAOAFijOseWV6aaR5S2q8Uun5p9IrY";
//
//    public static final String ALIYUN_IMG_BUCKET_NAME = "sylinx-img";
    
    public static final String ALIYUN_ACCESSKEYID     = "TMwEMFrzLLOud1Mk";
    public static final String ALIYUN_ACCESSKEYSECRET = "kLgULMZcsnBwLW9NhJaaKpzh5RPw4P";
    public static final String ALIYUN_IMG_BUCKET_NAME = "boshijie";
    

    /**
     * 图片云提供商
     * 
     * @return
     */
    public String getImageYunProvider();

    /**
     * 获取图片域名前缀
     * 
     * @return
     */
    public String getImageYunDomain();

    /**
     * 获取指定宽度高度的缩略
     * 
     * @param sourceImg
     * @param width
     * @param height
     * @return
     */
    public String getThumbImg(String sourceImg, int width, int height);

    /**
     * 上传文件
     * 
     * @param file 文件路径（包含文件名）
     * @param byte[] datas 文件内容
     * @param auto 自动创建父级目录(最多10级) return true or false
     */
    public boolean writeFile(String fileKey, byte[] datas, Boolean auto) throws Exception;

    /**
     * 上传文件
     * 
     * @param file 文件路径（包含文件名）
     * @param String datas 文件内容 return true or false
     */
    public boolean writeFile(String fileKey, String datas) throws Exception;

    /**
     * 上传文件
     * 
     * @param file 文件路径（包含文件名）
     * @param File _file 文件描述符 return true or false
     */
    public boolean writeFile(String fileKey, File _file, Boolean auto) throws Exception;

    /**
     * 批量上传文件
     * 
     * @param file 文件路径（包含文件名）
     * @param File _file 文件描述符 return true or false
     */
    public boolean writeFiles(List<String> fileKeys, List<File> _files) throws Exception;

    /**
     * 读取文件
     * 
     * @param file 文件路径（包含文件名） return 文件内容 或 null
     */
    public String readFile(String file) throws Exception;

    /**
     * 删除文件
     * 
     * @param file 文件路径（包含文件名） return true or false
     */
    public boolean deleteFile(String file) throws Exception;

    /**
     * 读取bytes
     * 
     * @param fileKey
     * @return
     * @throws Exception
     */
    public byte[] readBytes(String fileKey) throws Exception;

    /**
     * 读取目录列表
     * 
     * @param path 目录路径 return List<FolderItem> 数组或 null
     */
    public List<FolderItem> readDir(String path) throws Exception;

    public String getOutputDir();

    /**
     * 获取七牛上传token
     * 
     * @return
     * @throws JSONException
     * @throws AuthException
     */
    public String getUploadToken() throws Exception;

}
